-
Notifications
You must be signed in to change notification settings - Fork 341
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixes #518: lsquic compliance with RFC 9000 for MAX_STREAM_DATA frame #525
base: master
Are you sure you want to change the base?
Fixes #518: lsquic compliance with RFC 9000 for MAX_STREAM_DATA frame #525
Conversation
…ild successfully upon latest version
Thanks! lsquic/src/liblsquic/lsquic_full_conn_ietf.c Line 5868 in d3582f3
lsquic/src/liblsquic/lsquic_full_conn_ietf.c Line 5877 in d3582f3
And after creating the stream, need to call |
Thank you for your suggestions. The three points mentioned above are indeed necessary. First Stage:
Second Stage:
Third Stage: After the stream is created, the following information needs to be updated and recorded:
We will spend some more time reviewing RFC9000 and RFC9114 to ensure there are no other issues, and we will submit a new commit once confirmed. |
@@ -6186,6 +6186,21 @@ process_max_stream_data_frame (struct ietf_full_conn *conn, | |||
return 0; | |||
} | |||
|
|||
if ((conn->ifc_flags & (IFC_SERVER|IFC_HTTP)) == IFC_HTTP |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is better to move those two tests under if (is_peer_initiated(conn, stream_id))
, just in case side effects for regular MAX_STREAM_DATA processing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please see inline comment.
The story begins here:
#518.
The bug is:
The function
process_max_stream_data_frame()
returns an error if it detects that the corresponding stream has not been created, causing LSQUIC to close the connection.According to RFC9000:
If this stream is initiated by peer, the local side should create the receiving part of the stream and transition to the Recv state upon receiving a max_stream_data frame (similar to how process_stream_frame() handles it).
If this stream is initiated by local side, the local side should consider it as a connection error of type STREAM_STATE_ERROR.
We submitted the solution according to RFC9000.